package com.uacp.sgb.datos.dominio.persistencia.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import com.uacp.sgb.datos.dominio.entidades.Bien;
import com.uacp.sgb.datos.dominio.entidades.Dependencia;
import com.uacp.sgb.datos.dominio.entidades.Equipo;
import com.uacp.sgb.datos.dominio.entidades.Trabajador;
import com.uacp.sgb.datos.dominio.persistencia.util.UtilManager;

public class BienDao 
{	
	public static void guardar(Bien bien) 
	{		
		EntityManager em = UtilManager.getEntityManager();
		EntityTransaction et = em.getTransaction();
		
		et.begin();
		em.persist(bien);
		et.commit();
		em.close();
	}
	
	public static List<Bien> getBienesDependencia(Dependencia dependencia)
	{
//		EntityManager em = UtilManager.getEntityManager();
//		
//		Query query = em.createNamedQuery("Bien.getBienesDeDependencia");
//		query.setParameter("id", dependencia.getId());
//		List<Bien> bienes = query.getResultList();
//		em.close();
//		
//		return bienes;
		
		return null;
	}
	
	public static List<Equipo> listarEquipos(Trabajador trabajador)
	{
//		EntityManager em = UtilManager.getEntityManager();
//		
//		Query query = em.createNamedQuery("Equipo.listarEquipos");
//		query.setParameter("dni", trabajador.getDni());
//		
//		List<Equipo> equipos = query.getResultList();
//		em.close();
//		
//		return equipos;
		
		return null;
	}
	
	public static void updateBien(Bien bien)
	{
		EntityManager em = UtilManager.getEntityManager();
		EntityTransaction et = em.getTransaction();
		et.begin();
		em.merge(bien);
		et.commit();
		em.close();
	}
	
	public static List<Bien> getBienesAlta(Dependencia dependencia)
	{
		EntityManager em = UtilManager.getEntityManager();
		
		Query query = em.createNamedQuery("Bien.listarBienesAlta");
		query.setParameter("dependencia", dependencia.getNombre());
		
		List<Bien> bienes = query.getResultList();
		em.close();
		
		return bienes;
	}
	
	public static Bien buscar(Long id) 
	{
		EntityManager em = UtilManager.getEntityManager();
		EntityTransaction et = em.getTransaction();
		
		et.begin();
		Bien bien = em.find(Bien.class, id);
		et.commit();
		
		em.close();
		return bien;
	}

	public static String getUltimoSBNRegistrado(String descripcion) 
	{
		String ultimoSBN = null;
		
		EntityManager em = UtilManager.getEntityManager();
		EntityTransaction et = em.getTransaction();
		et.begin();
		Query query = em.createQuery("SELECT MAX(b.codigoSBN) FROM Bien b where b.tipoBien.descripcion = :descripcion");
		query.setParameter("descripcion", descripcion);
		
		try
		{
			ultimoSBN = (String)query.getSingleResult();
		}
		catch(NoResultException e)
		{
			em.close();
			return null;
		}
		
		et.commit();
		em.close();
		
		return ultimoSBN;
	}
}
